【Qt-Widget】

2023-12-25 18:28:22

■ QWidget

vWidget[i] = new QWidget();
vWidget[i]->setAutoFillBackground(true);
该函数用于设置当窗口作为被包含窗口时, 是否需要绘制背景。
注意:QT窗口系统默认状态下, 当一个窗口作为被包含窗口时, 其不再绘制背景, 即使指定了背景绘制参数(如背景颜色、背景图片等)。

```c
QWidget{
background-color: rgb(255, 170, 127);
}
//设置widget边框 这个设置会影响Widget上的子控件
ui->widget->setStyleSheet(QString::fromUtf8("border:3px solid blue"));
//设置widget_2边框
ui->widget->setStyleSheet(QString::fromUtf8("#widget_2{border:3px solid red}"));

background-color: rgb(52, 57, 71);
border-bottom-left-radius: 20px;

■ QTabWidget

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    this->setGeometry(0, 0, 800, 480);
    widget = new QWidget(this);
    /* 居中 */
    this->setCentralWidget(widget);
    /* 多页面小部件 */
    tabWidget = new QTabWidget();
    /* 水平布局实例化 */
    hBoxLayout = new QHBoxLayout();
    QList <QString>strLabelList;
    strLabelList<<"标签一"<<"标签二"<<"标签三";
    QList <QString>strTabList;
    strTabList<<"页面一"<<"页面二"<<"页面三";
    QList <QString>iconList;
    iconList<<":/icons/icon1"
           <<":/icons/icon2"
          <<":/icons/icon3";
    for (int i = 0; i < 3; i++) {
        label[i] = new QLabel();
        /* 设置标签文本 */
        label[i]->setText(strLabelList[i]);
        /* 标签对齐方式(居中) */
        label[i]->setAlignment(Qt::AlignCenter);
        /* 添加页面 */
        tabWidget->addTab(label[i],
                          QIcon(iconList[i]),
                          strTabList[i]
                          );
    }
    /* 是否添加关闭按钮 */
    //tabWidget->setTabsClosable(true);
    /* 将tabWidget水平直排布 */
    hBoxLayout->addWidget(tabWidget);
    /* 将垂直布局设置到widget */
    widget->setLayout(hBoxLayout);
}
MainWindow::~MainWindow()
{
}

■ QTableWidget

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    /* 设置主窗体的大小与位置 */
    this->setGeometry(0, 0, 800, 480);

    /* 实例化 */
    tableWidget = new QTableWidget(this);
    /* 设置tableWidget表居中 */
    setCentralWidget(tableWidget);
    /* 设置列数 */
    tableWidget->setColumnCount(2);
    /* 设置行数 */
    tableWidget->setRowCount(2);
    /* 使用标签设置水平标题标签 */
    tableWidget->setHorizontalHeaderLabels(
                QStringList()<<"姓名"<<"性别"
                );
                
    /* 字符串类型链表 */
    QList <QString> strList;
    strList<<"小明"<<"小红"<<"男"<<"女";
    
    for (int i = 0; i < 4; i++) {
        /* 实例化 */
        tableWidgetItem[i] = new QTableWidgetItem(strList[i]);
        /* 设置文本居中对齐 */
        tableWidgetItem[i]->setTextAlignment(Qt::AlignCenter);
    }
    /* 插入数据,表的index就是一个二维数组数据 */
    tableWidget->setItem(0, 0, tableWidgetItem[0]);
    tableWidget->setItem(1, 0, tableWidgetItem[1]);
    tableWidget->setItem(0, 1, tableWidgetItem[2]);
    tableWidget->setItem(1, 1, tableWidgetItem[3]);
}
MainWindow::~MainWindow()
{
}

■ QListWidget

//添加
void ProManageEdit::add(QStringList stlist)
{
    QListWidgetItem *item0 = new QListWidgetItem;
    ListManagEdit * editWidget = new ListManagEdit(this);
    editWidget->update(stlist);
    connect(editWidget,SIGNAL(edit_textChanged(int,QStringList)),this,SLOT(slots_edit_textChangedHandle(int,QStringList)));
    ui->listWidget->addItem(item0);
    ui->listWidget->setItemWidget(item0,editWidget);
}
//删除
void ProManageEdit::deleteStep(int step)
{
    auto editWidget = dynamic_cast<ListManagEdit*>(ui->listWidget->itemWidget(ui->listWidget->item(step)));
    disconnect(editWidget,SIGNAL(edit_textChanged(int,QStringList)),this,SLOT(slots_edit_textChangedHandle(int,QStringList)));
    ui->listWidget->removeItemWidget(ui->listWidget->item(step));
}

//修改数据 或者交换
void ProManageEdit::swap(int fromstep, QStringList fromstlist, int tostep, QStringList tostlist)
{
   QListWidgetItem* fromitem = ui->listWidget->item(fromstep);
   QListWidgetItem* toitem = ui->listWidget->item(tostep);

   auto fromTest = dynamic_cast<ListManagEdit*>(ui->listWidget->itemWidget(fromitem));
   auto toTest = dynamic_cast<ListManagEdit*>(ui->listWidget->itemWidget(toitem));

   fromTest->update(tostlist);
   toTest->update(fromstlist);
}
listWidget->item(i)->setTextColor(QColor(22, 22, 22, 225));
ui->listWidget->setSpacing(5); // 设置边距离
设置每个QListWidgetItem 之间的距离
QListWidget 对不齐问题,是因为进度条导致的解决办法是/屏蔽垂直滚动条   
ui->listWidget->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); //屏蔽垂直滚动条

■ QStackedWidget

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    this->setGeometry(0, 0, 800, 480);
    /* widget小部件实例化 */
    widget = new QWidget(this);
    /* 设置居中 */
    this->setCentralWidget(widget);
    /* 垂直布局实例化 */
    hBoxLayout = new QHBoxLayout();
    /* 堆栈部件实例化 */
    stackedWidget = new QStackedWidget();
    /* 列表实例化 */
    listWidget = new QListWidget();
    QList <QString>strListWidgetList;
    strListWidgetList<<"窗口一"<<"窗口二"<<"窗口三";
    for (int i = 0; i < 3; i++){
        /* listWidget插入项 */
        listWidget->insertItem(
                    i,
                    strListWidgetList[i]
                    );
    }
    QList <QString>strLabelList;
    strLabelList<<"标签一"<<"标签二"<<"标签三";

    for (int i = 0; i < 3; i++){
        label[i] = new QLabel();
        /* 设置标签文本 */
        label[i]->setText(strLabelList[i]);
        /* 标签对齐方式(居中) */
        label[i]->setAlignment(Qt::AlignCenter);
        /* 添加页面 */
        stackedWidget->addWidget(label[i]);
    }

    /* 设置列表的最大宽度 */
    listWidget->setMaximumWidth(200);
    /* 添加到水平布局 */
    hBoxLayout->addWidget(listWidget);
    hBoxLayout->addWidget(stackedWidget);

    /* 将widget的布局设置成hboxLayout */
    widget->setLayout(hBoxLayout);

    /* 利用listWidget的信号函数currentRowChanged()与
     * 槽函数setCurrentIndex(),进行信号与槽连接
     */
    connect(listWidget, SIGNAL(currentRowChanged(int)),
            stackedWidget, SLOT(setCurrentIndex(int)));
}
MainWindow::~MainWindow()
{
}

■ QCalendarWidget

	calendarWidget = new QCalendarWidget(this);
    calendarWidget->setGeometry(200, 20, 400, 300);
    QFont font;
    /* 设置日历里字体的大小为10像素 */
    font.setPixelSize(10);
    calendarWidget->setFont(font);
    /* 对象实例化设置显示的位置与大小 */
    pushButton = new QPushButton("回到当前日期",this);
    pushButton->setGeometry(200, 350, 100, 30);
    /* 对象实例化设置显示的位置与大小 */
    label = new QLabel(this);
    label->setGeometry(400, 350, 400, 30);
    QString str = "当前选择的日期:"
            + calendarWidget->selectedDate().toString();
    label->setText(str);
    /* 信号槽连接 */
    connect(calendarWidget, SIGNAL(selectionChanged()),
            this, SLOT(calendarWidgetSelectionChanged()));
    connect(pushButton, SIGNAL(clicked()),
            this, SLOT(pushButtonClicked()));
            
MainWindow::~MainWindow()
{

}
void MainWindow::calendarWidgetSelectionChanged()
{
    /* 当日历点击改变当前选择的期时,更新Label的显示内容 */
    QString str = "当前选择的日期:"
            + calendarWidget->selectedDate().toString();
    label->setText(str);
}

void MainWindow::pushButtonClicked()
{
    /* 设置当前选定的日期为系统的QDate */
    calendarWidget->setSelectedDate(QDate::currentDate());
}


文章来源:https://blog.csdn.net/sinat_23896491/article/details/135205781
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。