我的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
吗?
谢谢
答案 0 :(得分:8)
我认为当你说它不起作用时,你运行时没有看到状态栏。
我认为没有办法在设计师中完全做到这一点。设计师当然拒绝向QStatusBar
宣传某些东西的想法。我想你可以通过继承QStatusBar
,然后将QWidget
升级到你的子类来欺骗设计师。
但我认为我们还不需要走那条路。我认为对上面的代码进行一些调整应该有所帮助。
在设计器中,在对话框的底部添加一个布局,无关紧要。我打电话给我的'StatusBarLayout'。你可以看到布局(底部被压扁的红色框)。我删除了对话框中的下边距,以便状态栏在底部是齐平的。
现在删除上面关于布局l的代码中的所有内容,然后执行以下操作:
bar = new QStatusBar(this);
pUI->StatusBarLayout->addWidget(bar);
pUI->textEdit->setStatusTip("XXX");
textEdit
是设计师中添加的内容。现在,当你运行它时,你应该看到:
我希望有帮助
编辑:
您也可以在设计器中为各种小部件设置状态提示,因此除非您愿意,否则无需在代码中执行此操作。
答案 1 :(得分:4)
尝试添加如下的QStatusBar:
QDialog dialog;
QLayout* layoutWidget = new QVBoxLayout(&dialog);
layoutWidget ->addWidget(new QTextEdit);
QStatusBar* statusBar = new QStatusBar;
layoutWidget ->addWidget(statusBar );