QTableView 添加进度条、下拉选择框、日历、图片、文字等(QAbstractItemDelegate)

2023-11-15

本文主要记录QTableView 使用代理添加进度条、下拉选择框、日历等,并实现复制粘贴,右键菜单等,效果如下图所示,最后有动态展示。

效果图

图片说明

1:图中红色1处是√和×,双击可以相互切换显示

2:图中红色2处是Qspinbox,实现整数输入

3:图中红色3处是QDateTimeEdit

4:图中红色4处是QCheckBox

5:图中红色5处是进度条

6:图中红色6处是下拉选择框

 

 

 

继承QStyledItemDelegate,实现编辑器控件和项目渲染等

头文件comboboxdelegate.h

#ifndef COMBOBOXDELEGATE_H
#define COMBOBOXDELEGATE_H

#include <QStyledItemDelegate>
#include <QPixmap>
#include <QRect>

class comboboxdelegate : public QStyledItemDelegate
{
    Q_OBJECT
public:
    comboboxdelegate();
    ~comboboxdelegate();
protected:
    QWidget* createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const;
    void  paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const;
    void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const;
    void setEditorData(QWidget *editor, const QModelIndex &index) const;
    void updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index) const;
    bool editorEvent(QEvent *event, QAbstractItemModel *model, const QStyleOptionViewItem &option, const QModelIndex &index);
public:
    QRect CheckBoxRect(const QStyleOptionViewItem &option)const;

private:
    QPixmap pixmap1;
    QPixmap pixmap2;


};

#endif // COMBOBOXDELEGATE_H

源文件comboboxdelegate.cpp

#include "comboboxdelegate.h"
#include <QComboBox>
#include <QPainter>
#include <QApplication>
#include <QProgressBar>
#include <QColor>
#include <QCheckBox>
#include <QMouseEvent>
#include <QEvent>
#include <QDateTimeEdit>
#include <QSpinBox>

comboboxdelegate::comboboxdelegate()
{
    if(pixmap1.load(":/accept.png"))
    {
        printf("load-----233333\n");
    }
    else
    {
        printf("load-----55555\n");
    }
}
comboboxdelegate::~comboboxdelegate()
{
}

QWidget* comboboxdelegate::createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
    if(index.column()==2&&index.row() ==4)//在第4行第2列创建一个下拉选择框,上图6
    {
        QComboBox *comBox = new QComboBox(parent);//创建编辑器控件,并设置父对象
        comBox->addItem("combox1");
        comBox->addItem("combox2");
        comBox->addItem("combox3");
       // comBox->setCurrentIndex(0);
        comBox->setStyleSheet(
                              "QComboBox::drop-down{subcontrol-origin:padding;subcontrol-position:top right;width:15px;\
                                                    border-left-width:1px;\
                                                    border-left-color:darkgray;\
                                                    border-left-style:solid;\
                                                    border-top-right-radius:3px;\
                                                    border-bottom-right-radius:3px;}");
        return comBox;
    }
    else if(index.column() ==1&&index.row() ==2)//在第2行第1列创建日历,上图3
    {
        QDateTimeEdit *timeEdit = new QDateTimeEdit(parent);//创建编辑器控件,并设置父对象
        timeEdit->setDisplayFormat("yyyy-MM-dd HH:mm:ss");//显示日期及时间格式
       // timeEdit->setCalendarPopup(true);  //下拉菜单的方式
        return timeEdit;
    }
    else if(index.column() ==1&&index.row() ==1)//在第1行第1列创建一个QSpinBox ,上图2
    {
        QSpinBox *spinEdit = new QSpinBox(parent);//创建编辑器控件,并设置父对象
        spinEdit->setRange(0,10000);
        return spinEdit;
    }
    else if(index.column() ==0)//第1列不可编辑,直接返回null即可
    {
        return NULL;
    }
    else
    {
        return QStyledItemDelegate::createEditor(parent,option,index);
    }
}
void  comboboxdelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
   /* QStyleOptionViewItem view_option(option);
    initStyleOption(&view_option,index);
    if(view_option.state & QStyle::State_HasFocus)
    {
        view_option.state = view_option.state ^ QStyle::State_HasFocus;
    }  */

    if(option.state & QStyle::State_Selected)//选中高亮
    {
        painter->fillRect(option.rect,option.palette.highlight());
    }
    if(index.column() ==1&&index.row() ==4)//在第4行第1列处绘制一个进度条,上图5
    {
        int V = index.data(Qt::UserRole).toInt();
        QStyleOptionProgressBarV2 progressBarOption;
        progressBarOption.state =  QStyle::State_Enabled ;
        progressBarOption.direction = QApplication::layoutDirection();
        progressBarOption.rect = option.rect;
        progressBarOption.fontMetrics = QApplication::fontMetrics();
        progressBarOption.minimum =0;
        progressBarOption.maximum =100;
        progressBarOption.textAlignment = Qt::AlignCenter;
        progressBarOption.textVisible =true;
        progressBarOption.progress = V;
        progressBarOption.text = QString("%1%").arg(V);
        QProgressBar bar;
        bar.setStyleSheet("QProgressBar{border:none;text-align:center;}"
                          "QProgressBar::chunk{background:rgb(0,160,230);}");//设置进度条颜色
        bar.style()->drawControl(QStyle::CE_ProgressBar,&progressBarOption,painter,&bar);

    }
    else if(index.column() ==1&&index.row() ==3)//在第3行第1列处绘制一个复选框,上图4
    {
        bool checkFlag = index.data(Qt::UserRole).toBool();
        QStyleOptionButton checkBoxStyle;
        checkBoxStyle.state = checkFlag ? QStyle::State_On:QStyle::State_Off;
        checkBoxStyle.state |= QStyle::State_Enabled;
        checkBoxStyle.rect = CheckBoxRect(option);//改变复选框指示器位置,中心位置
       // checkBoxStyle.rect = option.rect;
        QCheckBox checbox;
        checbox.style()->drawControl(QStyle::CE_CheckBox,&checkBoxStyle,painter,&checbox);
    }
    else if(index.column() ==0)//绘制文本,颜色为红色
    {
      QString strValue = index.data().toString();
      QPen pen(Qt::red);
      painter->save();
      painter->setPen(pen);
      painter->setFont(QFont("Times",10,QFont::Bold));
      QApplication::style()->drawItemText(painter,option.rect,Qt::AlignCenter,QApplication::palette(),true,strValue);
      painter->restore();
    }
    else if(index.row() ==5 && index.column() ==1)//绘制图片,处于中心位置
    {
        const QPixmap &star = pixmap1;
        int x = option.rect.x()+option.rect.width()/2 - star.width()/2;
        int y = option.rect.y()+option.rect.height()/2 - star.height()/2;
        painter->drawPixmap(x,y,star);
    }
    else
    {
        QStyledItemDelegate::paint(painter,option,index);
    }

}
void comboboxdelegate::setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const
{
    if(index.column()==2&&index.row() ==4)
    {
        QComboBox* combox = static_cast<QComboBox*>(editor);
        model->setData(index,combox->currentText(),Qt::DisplayRole);
        model->setData(model->index(4,1),50,Qt::UserRole);
    }
    else if(index.column() ==1&&index.row() ==2)
    {
        QDateTimeEdit *timeEdit = static_cast<QDateTimeEdit*>(editor);
        QDateTime date = timeEdit->dateTime();//日期及时间格式---年月日是日期,时分秒是时间
        model->setData(index,date.toString("yyyy-MM-dd HH:mm:ss"));//日期及时间格式
    }
    else if(index.column() ==1&&index.row() ==1)
    {
        QSpinBox *spinEdit = static_cast<QSpinBox*>(editor);
        model->setData(index,spinEdit->value());
    }
    else
    {
        QStyledItemDelegate::setModelData(editor,model,index);
    }
}
void comboboxdelegate::setEditorData(QWidget *editor, const QModelIndex &index) const
{

    if(index.column()==2&&index.row() ==4)
    {
        QComboBox* combox = static_cast<QComboBox*>(editor);
        int textindex = combox->findText(index.data().toString());
        if(textindex !=-1)
        {
            combox->setCurrentIndex(textindex);

        }
    }
    else if(index.column() ==1&&index.row() ==2)
    {
        QString dateStr = index.data().toString();
        printf("----%s--------\n",dateStr.toAscii().data());
        QDateTime date = QDateTime::fromString(dateStr,"yyyy-MM-dd HH:mm:ss");//日期及时间格式
        QDateTimeEdit *timeEdit = static_cast<QDateTimeEdit*>(editor);
        timeEdit->setDateTime(date);//日期及时间格式
    }
    else if(index.column() ==1&&index.row() ==1)
    {
        int iValue = index.data().toInt();
        QSpinBox *spinEdit = static_cast<QSpinBox*>(editor);
        spinEdit->setValue(iValue);
    }
    else
    {
        QStyledItemDelegate::setEditorData(editor,index);
    }


}
void comboboxdelegate::updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
    editor->setGeometry(option.rect);
}

bool comboboxdelegate::editorEvent(QEvent *event, QAbstractItemModel *model, const QStyleOptionViewItem &option, const QModelIndex &index)
 {
     QMouseEvent* mouseEvent = static_cast<QMouseEvent*>(event);
     if(event->type() == QEvent::MouseButtonPress && option.rect.contains(mouseEvent->pos()))
     {
         if(index.column() ==1&&index.row() ==3)//单击改变复选框状态
         {
             bool data = model->data(index,Qt::UserRole).toBool();
             model->setData(index,!data,Qt::UserRole);
         }
     }
     if(event->type() == QEvent::MouseButtonDblClick && option.rect.contains(mouseEvent->pos()))
     {
         if(index.column() ==1&&index.row() ==0)//双击实现×和√切换
         {
             bool data = model->data(index,Qt::UserRole).toBool();
             model->setData(index,!data,Qt::UserRole);
             model->setData(index,data?QString::fromLocal8Bit("√"):QString::fromLocal8Bit("×"),Qt::DisplayRole);
         }

     }
     return QStyledItemDelegate::editorEvent(event,model,option,index);
 }
 QRect comboboxdelegate::CheckBoxRect(const QStyleOptionViewItem &option)const
 {
     QStyleOptionButton checkBoxbuttonOption;
     QRect checkBoxRect = QApplication::style()->subElementRect(QStyle::SE_CheckBoxIndicator,&checkBoxbuttonOption);
     QPoint checkBoxPoint(option.rect.x()+option.rect.width()/2 - checkBoxRect.width()/2,option.rect.y()+option.rect.height()/2 - checkBoxRect.height()/2);
     return QRect(checkBoxPoint,checkBoxRect.size());
 }

 

 

 

源文件widget.cpp--------- 设置QTableView、菜单、复制粘贴等功能

#include "widget.h"
#include "comboboxdelegate.h"

widget::widget(QWidget *parent) : QWidget(parent)
{


   // this->setFocusPolicy(Qt::StrongFocus);

    this->resize(500,500);
    QHBoxLayout* hlayout = new QHBoxLayout;
    model = new QStandardItemModel;


    view = new QTableView();
    hlayout->addWidget(view);
    this->setLayout(hlayout);
    view->horizontalHeader()->setStretchLastSection(true);//最后一列自适应宽度
    view->setAlternatingRowColors(true);//表格颜色交替
    view->setModel(model);
    view->setMouseTracking(true);//鼠标跟踪
    view->setItemDelegate(new comboboxdelegate);//设置代理
    //view->setSelectionBehavior(QAbstractItemView::SelectRows);
    //view->setSelectionMode(QAbstractItemView::SingleSelection);
    view->setStyleSheet("QTableView::item:hover{background-color:red;}");//鼠标悬浮在item上的样式表


    model->setColumnCount(3);
    model->setHeaderData(0,Qt::Horizontal,QObject::tr("name"));
    model->setHeaderData(1,Qt::Horizontal,QObject::tr("age"));
    model->setHeaderData(2,Qt::Horizontal,QObject::tr("sex"));

    model->setItem(0,0,new QStandardItem("tom"));
    QStandardItem* item4 = new QStandardItem;
    item4->setData(0,Qt::UserRole);//用于判断当前项的状态,0显示×,1显示√
    item4->setData(QString::fromLocal8Bit("×"),Qt::DisplayRole);
    item4->setEditable(false);//设置为不可编辑
    item4->setTextAlignment(Qt::AlignCenter);//文本居中显示
    model->setItem(0,1,item4);//√
    model->setItem(0,2,new QStandardItem(QString::fromLocal8Bit("总线")));


    model->setItem(1,0,new QStandardItem("tom2"));
    model->setItem(1,1,new QStandardItem("19"));
    QStandardItem* item5 = new QStandardItem;
    item5->setData(0,Qt::CheckStateRole);//设置可选数据角色
    item5->setCheckable(true);//设置为可选择
    item5->setEditable(false);//不可编辑
    model->setItem(1,2,item5);

    model->setItem(2,0,new QStandardItem("qqqq"));
    model->setItem(2,1,new QStandardItem("2021-01-16 10:04:21"));//给一个初始日期和时间
    model->setItem(2,2,new QStandardItem("f"));

    model->setItem(3,0,new QStandardItem("www"));
    QStandardItem* item3 = new QStandardItem;
    item3->setData(0,Qt::UserRole);//用于判断当前项的状态,0表示未选中,1表示选中
    item3->setEditable(false);//设置为不可编辑
    model->setItem(3,1,item3);
    model->setItem(3,2,new QStandardItem("f"));

    QStandardItem*  item11=model->itemFromIndex(model->index(3,2));
    item11->setEditable(false);




    QStandardItem* item = new QStandardItem;
    item->setEditable(false);
    item->setData("eee",Qt::DisplayRole);
    item->setData("tips",Qt::ToolTipRole);
    model->setItem(4,0,item);
    QStandardItem* item2 = new QStandardItem;
    item2->setData(22,Qt::UserRole);//进度条的初始值,数据角色为Qt::UserRole,这样可以避免进度条处的项目显示文本值
    item2->setEditable(false);
    model->setItem(4,1,item2);

    QStandardItem* item1 = new QStandardItem;
    item1->setData("combox1",Qt::DisplayRole);
    model->setItem(4,2,item1);

  /* QModelIndex index = model->index(4,2);
    QComboBox * box = new QComboBox;
    box->addItem("aa");
    box->addItem("bb");
    view->setIndexWidget(index,box);*/




    model->setItem(5,0,new QStandardItem("ddd"));
    model->setItem(5,1,new QStandardItem(30));
    model->setItem(5,2,new QStandardItem("mmm"));


  //  model->setData(model->index(6,0),"zzx");
   // model->setData(model->index(6,1),18);
  //  model->setData(model->index(6,2),"27");//尽量不要使用setData()和insertXXX()等函数,如果指定位置不存在,则可能添加失败



    connect(view->itemDelegate(),SIGNAL(closeEditor(QWidget*,QAbstractItemDelegate::EndEditHint)),this,SLOT(print11(QWidget*,QAbstractItemDelegate::EndEditHint)));
    connect(model,SIGNAL(itemChanged(QStandardItem*)),this,SLOT(print22(QStandardItem*)));//只有数据改变后,才发送此信号
    connect(view,SIGNAL(entered(const QModelIndex& )),this,SLOT(print33(const QModelIndex&)));//鼠标进入,必须设置鼠标跟踪
    /添加右键菜单
    view->setContextMenuPolicy(Qt::CustomContextMenu);//必须设置,不然菜单不显示
    tableviewMen = new QMenu(view);
    action1 = new QAction("action1",view);
    action2 = new QAction("action2",view);
    tableviewMen->addAction(action1);
    tableviewMen->addAction(action2);
    connect(action1,SIGNAL(triggered()),this,SLOT(action1_slot1()));
    connect(action2,SIGNAL(triggered()),this,SLOT(action2_slot2()));
    connect(view,SIGNAL(customContextMenuRequested(QPoint)),this,SLOT(viewMen_Slot(QPoint)));

}
widget::~widget()
{

}
void widget::action1_slot1()
{
    printf("action1_slot1    \n");
}

void widget::action2_slot2()
{
    printf("action2_slot2    \n");
}

void widget::viewMen_Slot(QPoint p)
{
    printf("viewMen_Slot   \n");
    QModelIndex index = view->indexAt(p);//鼠标点击处的数据项索引
    if(index.isValid())//此判断,可以避免空白处右击菜单的出现
    {
        QItemSelectionModel* selections = view->selectionModel();//当前选中的模型
        QModelIndexList slected = selections->selectedIndexes();//当前选中的模型索引列表
        if(slected.count() ==1)//单选时,显示的菜单
        {
            action1->setVisible(true);
            action2->setVisible(true);
        }
        else//选中多个项目时,显示的菜单
        {
            action1->setVisible(false);
            action2->setVisible(true);
        }
       tableviewMen->exec(QCursor::pos());
    }

}

void widget::print11(QWidget *editor, QAbstractItemDelegate::EndEditHint hint)
{
    printf("slot------print11\n");
    Q_UNUSED(editor);
}

void widget::print22(QStandardItem* item)
{
    printf("slot------print22\n");
    printf("item.data=%s   \n",item->text().toAscii().data());
}

void widget::print33(const QModelIndex &index)
{
    printf("slot------print33\n");
    printf("item.data=%s   \n",index.model()->data(index,Qt::DisplayRole).toString().toAscii().data());
    QToolTip::showText(QCursor::pos(),index.model()->data(index,Qt::DisplayRole).toString());//全局tip,鼠标放在项目上,可以显示的信息
}


void widget::keyPressEvent(QKeyEvent *e)
{
    if(e->modifiers()== Qt::ControlModifier && e->key() == Qt::Key_C)//ctrl +c  复制被按下
    {
        printf("-------------\n");
        QClipboard* board = QApplication::clipboard();//粘贴板
        const QModelIndex index = view->currentIndex();
        board->setText(index.model()->data(index,Qt::DisplayRole).toString());//设置粘贴板数据
    }
    else if(e->matches( QKeySequence::Paste ))//ctrl +v 粘贴被按下,此方法和上面一样,都可以检测组合键被按下
    {
        QClipboard* board = QApplication::clipboard();
        const QModelIndex index = view->currentIndex();//获取当前项模型索引
        view->model()->setData(index,board->text());//取出粘贴板数据,并设置当前项数据
        printf("----%s-----------\n",board->text().toAscii().data());
        QStandardItem*  tmpitem=static_cast<QStandardItemModel*>(view->model())->itemFromIndex(index);
        printf("item =%s \n", tmpitem->text().toAscii().data());
    }
    else
    {
        return QWidget::keyPressEvent(e);
    }

}

 

关于鼠标右键菜单的逻辑可以参考另一篇文章QTableView添加右键菜单

动图展示

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

QTableView 添加进度条、下拉选择框、日历、图片、文字等(QAbstractItemDelegate) 的相关文章

  • Qt/c++ 随机字符串生成[重复]

    这个问题在这里已经有答案了 我正在创建一个应用程序 需要生成多个随机字符串 几乎就像一个由一定长度的 ASCII 字符组成的唯一 ID 这些字符混合有大写 小写 数字字符 有没有 Qt 库可以实现这一点 如果没有 在纯 C 中生成多个随机字
  • 如何在 C++ 和 QML 应用程序中使用 qrc?

    我在 Windows7 上用 c qnd Qt Creator QML 编写了 Qt Quick Desktop 应用程序 现在 我必须部署它 并且我需要隐藏 qml 文件和图像 意味着 将它们放入资源等中 我读到有一个很好的方法可以使用
  • 如何在 C++ 运行时更改 QML 对象的属性?

    我想在运行时更改 QML 对象的文本 我尝试如下 但文本仍然为空 这是后端类 class BackEnd public QObject Q OBJECT Q PROPERTY QString userFieldText READ userF
  • 程序意外完成 - QT Creator

    我正在尝试使用 QT Creator 使用 QT 框架开发 GUI 控制台应用程序 我使用的是Windows XP 我安装了QT 4 8 3和mingw 两者均已安装 没有任何错误 然后我安装了QT Creator QT 版本 路径中的 Q
  • 当我尝试构建 Qt 4.7.1 静态库时,“找不到 -ljscore”

    我尝试从最新的源构建静态 Qt 库 但出现以下错误 usr bin ld cannot find ljscore collect2 ld returned 1 exit status 如何解决这个问题呢 这是 Qt 构建系统中自 4 7 0
  • (如何)我可以抑制未找到包配置文件的警告吗?

    我正在尝试创建一个CMakeLists txt尝试查找的文件Qt5 如果失败 则尝试回退到Qt4安装 该脚本到目前为止有效 但如果出现以下情况我总会收到警告Qt5未安装 注意FindQt5 cmake是由提供Qt5并且仅当以下情况时才可用Q
  • Qt 创建者 + MITK (Linux)

    我正在尝试使用MITK 与 Qt Creator 我已经通过 ccmake 成功编译并使用了 VTK 和 ITK 我已经编译了 MITK超级建造模式 它下载 CTK VTK ITK 等 然后我就配置好了 我已经用 make 编译了 大约两个
  • GoQt 致命错误:QAbstractAnimation:没有这样的文件或目录

    我尝试编译 Qt 来开发桌面应用程序 我按照 Qt 网站上的官方 wiki 指南的说明进行操作 当我尝试go run示例文件夹中的示例 我收到错误 去运行 home pinkya rabbit workspace go1programs s
  • 如何在模型更改时停止ListView“跳跃”

    我需要做什么 我需要创建一个聊天窗口用一个ListView在 QML 中存储聊天消息 我设置listView positionViewAtEnd 以便跟踪最后的消息 我禁用positionViewAtEnd当我向上滚动时 我可以阅读过去的消
  • 加权 Voronoi 的 CGAL 2D APOLLONIUS 图 - 如何生成和获取面和顶点?

    我正在尝试根据阿波罗尼乌斯图生成加权沃罗诺伊 我正在使用 CGAL 库 我找不到如何从 apollonius 获取面和顶点的好例子 我有以下类型定义 typedef double NT typedef CGAL Cartesian lt N
  • QGraphicsScene::clear 不会改变 sceneRect

    我有一个 QGraphicsScene 场景 和 QGraphicsView graphicsView 我有一个画图的方法 当我需要重绘所有图形时 我调用这个方法 一切都好 但我意识到 scene gt clear 不会改变 sceneRe
  • 与 Qt 项目的静态链接

    我有一个在 Visual Studio 2010 Professional 中构建的 Qt 项目 但是 当我运行它 在调试或发布模式下 时 它会要求一些 Qt dll 如果我提供 dll 并将它们放入 System32 中 它就可以工作 但
  • Qt 布局,在小部件大小更改后调整到最小大小

    基本上我有一个QGridLayout里面有一些小部件 最重要的是 2 个标签 我用它们将图像绘制到屏幕上 好吧 如果用户愿意 他可以更改传入图像的分辨率 从而强制标签调整大小 我们假设标签的初始大小是320x240 用户将 VideoMod
  • 将 gnuplot 嵌入现有 QtWidget 中

    我正在用 C 创建一个 伪 实时绘图应用程序 使用 gnuplot 作为绘图后端 我的要求之一是绘图必须位于现有窗口内 而不是有一个单独的绘图窗口 gnuplot 默认为 Gnuplot 有一个选项可以指定 Qt 小部件 ID 这似乎适合我
  • Qt 5.6 测试版 Visual Studio 2015

    我已经安装了这个 http download qt io development releases qt 5 6 5 6 0 beta qt opensource windows x86 msvc2015 5 6 0 beta exe mi
  • 如何检测QTableView中的双击

    我正在使用 PyQt 创建 GUI 应用程序 在继承自 QTableView 的视图中 需要检测用户双击行时选择的行 该表可以排序 但不能编辑 我该怎么做 注意 尝试了 doubleClicked int 信号 它是由鼠标按钮发出的 而不是
  • Qt moc 在头文件中实现?

    是否可以告诉 Qt MOC 我想声明该类并在单个文件中实现它 而不是将它们拆分为 h 和 cpp 文件 如果要在 cpp 文件中声明并实现 QObject 子类 则必须手动包含 moc 文件 例如 文件main cpp struct Sub
  • 是否可以在 Qt Creator 中将 Qt 样式表与升级的小部件一起使用?

    我正在尝试使用 Qt 样式表对标准小部件进行一些重大的重新设计 因此 在为不同的小部件手动完成大部分工作之后 objectName选择器 我决定以某种方式对类似的小部件进行分组 例如我有多个QFrames其作用类似于内部表单中的标题 我希望
  • 如何消除 QTableWidget 中的空白?

    How do I get rid of the whitespace in my application 我想摆脱 QTableWidget 中的空白 蓝色箭头 我该怎么做 这是我的应用程序的代码 gridLayout QGridLayou
  • 如何在qt中创建正确的退出按钮

    我正在尝试创建一个退出按钮来正确关闭我在 QT 中制作的 GUI 我尝试通过以下方式执行此操作 include

随机推荐

  • 坑爹公司大盘点 --- 转自拉钩

    那些年我们满怀憧憬迈入社会 却遭遇了理想与现实的碰撞 一起看看网上盘点的坑爹公司吧 遇到这样的公司真的是醉了 gt 转自拉钩 1 头衔公司 从入职第一天 就封你为大中华区销售总监 或者全球发行战略副总裁 全国市场委员会主席 然后没有手下 没
  • 如何有效保证Java代码单元测试覆盖率

    背景介绍 我们在实际项目开发过程中 不同level的童鞋由于专业技能的层次不同 导致在参与实际开发的业务代码中经常会出现各种bug 项目管理中好的pm或许会给充足的时间来让开发童鞋们定位修复这些bug 也有各种客观原因的PM不会在项目中预留
  • Spring Boot使用方法

    Spring Boot 七步走 1 勾选包 Spring Boot是自带TomCat的 创建Spring Boot工程文件 创建时需要更改资源下载地址 我选择阿里云的这个地址 而且Spring Boot不需要导包 只需要勾选需要的包 进入后
  • 深度学习基础:SVD奇异值分解及其意义【转】

    排版较好的一版 http shartoo github io SVD decomponent 上面的补充 奇异值的物理意义是什么 https www zhihu com question 22237507 answer 225371236
  • 使用 ELK 收集日志

    在当前分布式 微服务架构下 各个应用都部署在不同的服务器上 每个应用都在记录着自己重要或者不重要的日志信息 当我们要通过日志信息来排查错误时 可以根据出错应用在对应的机器上找报错相关的日志信息 但是 可能我们不具有相应服务器的访问权限 也可
  • 初学者入门:认识STM32单片机

    本教程含有较多专业词汇 大部分时候 不完全理解并不影响继续往下阅读 大家只需要了解大致的概念即可 当然 也鼓励大家多查百度和多问chatgpt 让自己学会的更多 什么是单片机 单片机 就是把中央处理器CPU 存储器 等计算机的功能部件 和定
  • C语言进阶:文件操作,学生信息管理系统

    文章目录 1 重定向 2 读文件和写文件 3 打开文件和关闭文件 4 综合大题 学生信息管理系统 5 二进制读文件和二进制写文件 6 文件定位 7 其他文件操作函数 8 系统再优化之用户登录与注册 1 重定向 重定向文件输出 把运行出来的内
  • WSL子系统启动报错 Wsl/Service/CreateInstance/CreateVm/HCS_E_SERVICE_NOT_AVAILABLE

    今天琢磨着WindowsLinux子系统研究研究新东西 结果当我启动WSL时却出现了下面的提示 WSL启动报错 由于未安装所需的特性 无法启动操作 Error code Wsl Service CreateInstance CreateVm
  • url pattern中/与/*的区别

  • 爬虫入门级(五)

    Python爬虫入门级 五 实现两个小案例 1 gt 爬取豆瓣电影的TOP250 2 gt 爬取电影的资源下载地址 爬取豆瓣电影的TOP250 1 分页爬取数据 2 csv数据加载到本地 抓取豆瓣电影排行 1 判断页面元代满是否有数据 2
  • Postman 发送GET请求传递List自定义对象参数举例

    这是一个GET请求 后端接收方式 用List
  • 微服务简介

    微服务简介 微服务架构是一种软件架构模式 它将一个大型应用程序拆分为一组小型 独立的服务 每个服务都有自己的业务逻辑和数据存储 这些服务可以独立开发 部署和扩展 通常使用HTTP或其他轻量级通信协议进行通信 以下是微服务架构的一些关键特点和
  • android基础知识题,史上最全的Android面试题集锦

    Android基本知识点 1 常规知识点 1 Android类加载器 在Android开发中 不管是插件化还是组件化 都是基于Android系统的类加载器ClassLoader来设计的 只不过Android平台上虚拟机运行的是Dex字节码
  • 找不到该项目(无法删除文件)

    win10桌面新建文件提示 找不到该项目 该项目不在C users 中 请确认该项目的位置 然后重试 的原因是系统错误导致的 具体解决方法步骤如下 1 首先新建一个txt文件 为了方便txt文件建在跟目标文件供一个目录下 2 然后把下面代码
  • 学习lava源码时遇到的python知识

    内置函数 参考 https docs python org 3 7 library functions html Built in Functions abs delattr hash memoryview all dict help mi
  • MVC 模式与三层架构

  • Pr批量字幕制作

    一 标题字幕 1 选择文件 新建 旧版标题 2 根据所需设置一下 视频属性的高宽 是根据自己视频情况而定 一般新建的时候 就会根据自己导入的视频而显示 无需再设置 3 添加文字后 根据自己所需设置所需字幕 钢笔工具可以设置字幕移动 滚动字幕
  • 第十三届蓝桥杯大赛软件组省赛 Python大学A组 个人题解

    Link 文章目录 Python大学A组 个人题解 试题 A 裁纸刀 思路 代码 试题 B 寻找整数 思路 代码 试题 C 质因数个数 思路 代码 试题 D 矩形拼接 思路 代码 试题 F 重新排序 思路 代码 试题 G 全排列的价值 思路
  • Spring 系列

    前面几篇文章我们聊过IOC以及Spring IOC 其中Spring IOC 的一个实现方式包含 依赖查找 和依赖注入 本文我们进一步详细聊一下 SpringIOC的依赖查找 及其对应的方式 以及安全性 内置依赖等 查找类型 1单一类型 根
  • QTableView 添加进度条、下拉选择框、日历、图片、文字等(QAbstractItemDelegate)

    本文主要记录QTableView 使用代理添加进度条 下拉选择框 日历等 并实现复制粘贴 右键菜单等 效果如下图所示 最后有动态展示 图片说明 1 图中红色1处是 和 双击可以相互切换显示 2 图中红色2处是Qspinbox 实现整数输入