Qt:如何实现QDialog StatusBar

时间:2011-05-26 08:08:43

标签: c++ qt qdialog

我的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已经有很少的包含小部件的网页。

我的问题是,我可以在QDesigner中使用palceholder或以某种方式推广托管QStatusbar类的小部件吗?我不知道......

在这种情况下我该怎么办?我可以实施新的QStatusbar吗?

谢谢

2 个答案:

答案 0 :(得分:8)

我认为当你说它不起作用时,你运行时没有看到状态栏。

我认为没有办法在设计师中完全做到这一点。设计师当然拒绝向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

我希望有帮助

编辑:

您也可以在设计器中为各种小部件设置状态提示,因此除非您愿意,否则无需在代码中执行此操作。

答案 1 :(得分:4)

尝试添加如下的QStatusBar:

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