Qt: как реализовать QDialog StatusBar - PullRequest
3 голосов
/ 26 мая 2011

У меня QDialog, который в значительной степени разработан с QDesigner, я видел в Интернете, что я мог бы добавить QStatusBar с кодом, подобным этому:

#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();
}

В моем случае это даже не работает .. может быть, QDialog уже имеет несколько слоев, содержащих виджет.

У меня вопрос, могу ли я как-нибудь использовать palceholder в QDesigner или как-то продвигать виджет, который содержит класс QStatusbar? Я не знаю ...

Что я могу сделать в таком случае? я могу реализовать новый QStatusbar?

Спасибо

Ответы [ 2 ]

9 голосов
/ 26 мая 2011

Полагаю, когда вы говорите, что это не работает, вы не видите строку состояния во время работы.

Я не вижу способа сделать это полностью в конструкторе.Дизайнер, безусловно, сопротивляется идее продвижения чего-то до QStatusBar.Я полагаю, вы могли бы обмануть дизайнера, создав подкласс QStatusBar, а затем повысив QWidget до своего подкласса.

Но я не думаю, что нам пока нужно идти по этому пути.Я думаю, что несколько настроек вашего кода должны помочь.

В конструкторе добавьте макет, не имеет значения, какого рода, внизу вашего диалога.Я назвал мой «StatusBarLayout».Вы можете увидеть макет (красная коробка, которая сплющена внизу).Я удалил нижнее поле в диалоговом окне, чтобы строка состояния находилась в нижней части.

enter image description here

Теперь удалите все в приведенном выше коде с макетом l и просто сделайте это:

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

textEdit был добавлен в конструктор.Теперь, когда вы запустите его, вы должны увидеть это:

enter image description here

Надеюсь, это поможет

Редактировать:

Вы также можете установить подсказки статусадля различных виджетов в дизайнере, так что нет необходимости делать это в коде, если вы не хотите.

4 голосов
/ 26 мая 2011

Попробуйте добавить QStatusBar следующим образом:

QDialog dialog;
QLayout* layoutWidget = new QVBoxLayout(&dialog);
layoutWidget ->addWidget(new QTextEdit);
QStatusBar* statusBar = new QStatusBar;
layoutWidget ->addWidget(statusBar );
...