如何创建自定义窗口小部件并在Qt Designer中使用它?

时间:2019-07-18 21:10:01

标签: c++ qt

我非常需要创建我的自定义窗口小部件并在QtDesigner中使用它(将QWidget提升为我的窗口小部件)。我以前从未做过,也无法用Google搜索任何有用的信息。我需要获取的小部件只是带有少量QLabel和QLineEdit对象的方形框。目前,我有以下代码:

#include "customwidget01.h"
#include "qlabel.h"
#include "qlineedit.h"
#include "QGridLayout"
customWidget01::customWidget01(QWidget *parent) : QWidget(parent)
{
    QString textSheets = "QLabel,QLineEdit {width:60;height:20;max-width:60;max-height:20;;min-width:60;min-height:20;}";
    QString widgetSheet = "customWidget01 {width:200;height:200;max-width:200;max-height:200;;min-width:120;min-height:200;}";
    this->setStyleSheet(widgetSheet + textSheets);
    QLabel *label1= new QLabel(this);
    label1->setText("1st arg");
    QLabel *label2 = new QLabel(this);
    label2->setText("2nd arg");
    QLabel *label3= new QLabel(this);
    label3->setText("3rd arg");
    QLabel *label4= new QLabel(this);
    label4->setText("4th arg");
    QLineEdit *line1 = new QLineEdit(this);
    line1->setPlaceholderText("enter 1st arg");
    QLineEdit *line2 = new QLineEdit(this);
    line2->setPlaceholderText("enter 2nd arg");
    QLineEdit *line3 = new QLineEdit(this);
    line3->setPlaceholderText("enter 3rd arg");
    QLineEdit *line4 = new QLineEdit(this);
    line4->setPlaceholderText("enter 4th arg");
    QGridLayout *layout = new QGridLayout();
    this->setLayout(layout);
    layout->setVerticalSpacing(10);
    layout->setHorizontalSpacing(10);
    layout->addWidget(label1,0,0);
    layout->addWidget(label2,1,0);
    layout->addWidget(label3,2,0);
    layout->addWidget(label4,3,0);
    layout->addWidget(line1,0,1);
    layout->addWidget(line2,1,1);
    layout->addWidget(line3,2,1);
    layout->addWidget(line4,3,1);
    this->setVisible(true);
}

我的问题是:

  1. 不能在小部件本身周围绘制边框
  2. 垂直和水平间距不起作用

QtDesigner一直用于GUI-不太熟悉纯代码中的gui创建。

2 个答案:

答案 0 :(得分:1)

让我帮助您获得漂亮的界面,您需要学习CSS 我会告诉你它是如何工作的 那就是你现在所拥有的

enter image description here

这意味着您没有正确编写CSS代码

QString textSheets = "QLabel,QLineEdit {width:60;height:20;max-width:60;max-height:20;;min-width:60;min-height:20;}";
QString widgetSheet = "customWidget01 {width:200;height:200;max-width:200;max-height:200;;min-width:120;min-height:200;}";
this->setStyleSheet(widgetSheet + textSheets);  // does not work

我将交换这些行

QString textSheets = "QLineEdit{ border-width: 2px; border-style: solid; border-color: red green black rgb(127,255,10); }"
                      "QLabel  { border-width: 2px; border-style: solid; border-color: green black rgb(10,255,180) rgb(180,10,158); }" ;

setStyleSheet(textSheets);

这就是结果

enter image description here

只需调整大小即可

//label1->setMinimumSize(150,50);
label1->setFixedSize(150,50);
//label1->setMaximumSize(150,50);
//label1->setMidLineWidth(150);

这就是结果

enter image description here

答案 1 :(得分:0)

  1. 在设计模式下添加QWidget
  2. 右键单击它,然后从上下文菜单中选择Promote to...
  3. customWidget01派生类的名称(QWidget)写入Promoted class name
  4. 确保在Header file中生成的文本正确。
  5. 点击添加。
  6. 选择它,然后单击升级。