Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Qt : how to implement QDialog StatusBar

Tags:

c++

qt

qdialog

I have QDialog that is heavily designed with QDesigner , I saw on the web that I could add QStatusBar with code like this :

#include <QDialog>
#include <QStatusBar>
#include <QLayout>
#include <QApplication>
#include <QTextEdit>
#include <QStatusTipEvent>

class Dialog : public QDialog {
public:
Dialog() : QDialog(){
QLayout *l = new QVBoxLayout(this);
QTextEdit *te = new QTextEdit;
te->setStatusTip("XXX");
l->addWidget(te);
bar = new QStatusBar;
l->addWidget(bar);
l->setMargin(0);
l->setSpacing(0);
}
private:
QStatusBar *bar;
protected:
bool event(QEvent *e){
if(e->type()==QEvent::StatusTip){
QStatusTipEvent *ev = (QStatusTipEvent*)e;
bar->showMessage(ev->tip());
return true;
}
return QDialog::event(e);
}
};

int main(int argc, char **argv){
QApplication app(argc, argv);
Dialog dlg;
return dlg.exec();
}

Its not even working in my case .. maybe the QDialog is already have few layets that holds widget.

My question is can I some how use palceholder in the QDesigner or somehow promote widget that place hold the QStatusbar class? I don’t know …

What can I do in such case? can I implement new QStatusbar?

Thanks

like image 283
user63898 Avatar asked May 26 '11 08:05

user63898


People also ask

How do I add a status bar to QT?

The status bar can be retrieved using the QMainWindow::statusBar() function, and replaced using the QMainWindow::setStatusBar() function. In this example, we'll start from MainWindow class. We need to add menu actions. In this example, we'll add just one menu (MyMenuAction) to trigger action.

What is status bar in Qt?

QMainWindow object reserves a horizontal bar at the bottom as the status bar. It is used to display either permanent or contextual status information. There are three types of status indicators − Temporary − Briefly occupies most of the status bar. For example, used to explain tool tip texts or menu entries.

Which function is used to reset the timeout block if the message is displayed on the status bar?

The clearTimeout() method clears a timer set with the setTimeout() method.


2 Answers

I presume when you say it doesn't work, that you are not seeing the status bar when you run.

I don't see any way to do this wholly in the designer. The designer certainly resists the idea of promoting something to a QStatusBar. I suppose you could fool the designer by subclassing QStatusBar, and then promoting a QWidget to your subclass.

But I don't think we need to go that route just yet. I think with a few tweaks to the code you have above should help.

In the designer, add a layout, it doesn't matter what kind, at the bottom of your dialog. I called mine 'StatusBarLayout'. You can see the layout (the red box that's squished at the bottom). I removed the bottom margin in the dialog so that the status bar is flush at the bottom.

enter image description here

Now remove everything in the above code about layout l, and just do this:

bar = new QStatusBar(this);
pUI->StatusBarLayout->addWidget(bar);
pUI->textEdit->setStatusTip("XXX");

The textEdit was something added in the designer. Now when you run it you should see this:

enter image description here

I hope that helps

Edit:

You can also set the Status Tips for various widgets in the designer too, so there is no need to do that in the code unless you want to.

like image 106
Liz Avatar answered Oct 19 '22 14:10

Liz


Try adding a QStatusBar like this:

QDialog dialog;
QLayout* layoutWidget = new QVBoxLayout(&dialog);
layoutWidget ->addWidget(new QTextEdit);
QStatusBar* statusBar = new QStatusBar;
layoutWidget ->addWidget(statusBar );
like image 31
Kristofer Avatar answered Oct 19 '22 15:10

Kristofer