|
| 1 | +--- |
| 2 | +layout: post |
| 3 | +title: "Qt中的常用组件QWidget篇" |
| 4 | +date: 2025-10-30T19:58:42+0800 |
| 5 | +description: "QPixmap用于展示图像,QCursor可以设置光标效果,比如我们可以先用图像文件构建QPixmap对象,需要的话可以使用scaled调整大小,再通过这个QPixmap构造QCursor,将其设置进我们所需要的小组件,比如QPushButton,同时如果需要的话,可以构建一个热点(即实际点击的位置),就能够实现将光标放在某个组件上时将光标替换为我们所需要的光标图像的效果。提供给用户一个日历(精确到年月日),能够让用户选择日期,并通过selectionChanged信号来获取用户选择的日期。" |
| 6 | +keywords: "Qt中的常用组件:QWidget篇" |
| 7 | +categories: ['未分类'] |
| 8 | +tags: ['开发语言', '前端', 'Qt', 'C'] |
| 9 | +artid: "154096021" |
| 10 | +arturl: "https://blog.csdn.net/wangjialelele/article/details/154096021" |
| 11 | +image: |
| 12 | + path: https://api.vvhan.com/api/bing?rand=sj&artid=154096021 |
| 13 | + alt: "Qt中的常用组件QWidget篇" |
| 14 | +render_with_liquid: false |
| 15 | +featuredImage: https://bing.ee123.net/img/rand?artid=154096021 |
| 16 | +featuredImagePreview: https://bing.ee123.net/img/rand?artid=154096021 |
| 17 | +cover: https://bing.ee123.net/img/rand?artid=154096021 |
| 18 | +img: https://bing.ee123.net/img/rand?artid=154096021 |
| 19 | +--- |
| 20 | + |
| 21 | + |
| 22 | + |
| 23 | +# Qt中的常用组件:QWidget篇 |
| 24 | + |
| 25 | +--- |
| 26 | + |
| 27 | +###### 1、enabled |
| 28 | + |
| 29 | +是否被禁用,通过setEnabled(true or false),禁用后该组件变为灰色 |
| 30 | + |
| 31 | +###### 2、geometry |
| 32 | + |
| 33 | +储存着组件的大小与位置信息,分别是x, y, width, height |
| 34 | + |
| 35 | +###### 3、QRect |
| 36 | + |
| 37 | +存放geometry中信息的类,通过他可以取出某个部件的geometry信息,并通过他来访问需要的部分 |
| 38 | + |
| 39 | +###### 4、QIcon |
| 40 | + |
| 41 | +通过这个对象来设置对象的图标,其中需要引入qrc机制:如果通过直接指定文件绝对路径的方式,那么无论是自己还是客户端都很容易出现文件误删或者路径变化导致的图标文件失效,所以引入qrc机制,他可以将导入的资源直接在编译时,编译进二进制的可执行程序当中(通过char数组的方式)但是这种机制对于体积很大的文件就没有用了。 |
| 42 | + |
| 43 | +创建qrc文件的方式就是在新建文件中选择Qt,其中有Qt source file,新建,并在页面中新建prefix,将其设置为/,这样在访问的时候就可以直接通过":/filename"的方式访问了(当然也可以再设置一个文件夹来存放各种引入qrc的文件,具体访问方式就是再指定文件夹就好了) |
| 44 | + |
| 45 | +###### 5、Window Opacity |
| 46 | + |
| 47 | +设置窗口透明度,大小从0~1,越大越不透明。 |
| 48 | + |
| 49 | +###### 6、QCursor 与 QPixmap |
| 50 | + |
| 51 | +QPixmap用于展示图像,QCursor可以设置光标效果,比如我们可以先用图像文件构建QPixmap对象,需要的话可以使用scaled调整大小,再通过这个QPixmap构造QCursor,将其设置进我们所需要的小组件,比如QPushButton,同时如果需要的话,可以构建一个热点(即实际点击的位置),就能够实现将光标放在某个组件上时将光标替换为我们所需要的光标图像的效果 |
| 52 | + |
| 53 | +###### 7、QFont |
| 54 | + |
| 55 | +QFont对象用来设置对象的字体,其中可供设置的接口有如下几个: |
| 56 | + |
| 57 | +QFont font; |
| 58 | + |
| 59 | +font.setFamily("eg: 仿宋"); |
| 60 | + |
| 61 | +font.setPixelSize(30); //设置字体大小,以像素为单位 |
| 62 | + |
| 63 | +font.setItalic(true); //设置是否使用斜体 |
| 64 | + |
| 65 | +font.setBold(true); //是否使用粗体 |
| 66 | + |
| 67 | +font.setUnderLine(true); //是否使用下划线 |
| 68 | + |
| 69 | +font.setStrikeOut(true); //是否使用删除线(即在文字中央加上一条斜杠) |
| 70 | + |
| 71 | +label->setFont(font); //设置font(以label为例) |
| 72 | + |
| 73 | +###### 8、QToolTip |
| 74 | + |
| 75 | +QToolTip对象用来设置构件的提示信息,直接使用字符串即可构建,使用setToolTip设置,同时如果想要设置提示时间的话,通过setToolTipDuration设置即可(单位是毫秒) |
| 76 | + |
| 77 | +###### 9、FocusPolicy |
| 78 | + |
| 79 | +FocusPolicy是组件的一个属性,用来设置焦点策略,常用的策略有: |
| 80 | + |
| 81 | +NoFocus: 不允许当前组件获得焦点 |
| 82 | + |
| 83 | +TabFocus: 通过tab键来获得焦点 |
| 84 | + |
| 85 | +ClickFocus: 通过点击获得焦点 |
| 86 | + |
| 87 | +StrongFocus: 最常用的一个,既可以通过点击获得焦点,也可以通过tab获得焦点 |
| 88 | + |
| 89 | +WheelFocus: 可以通过鼠标滚轮滚动获得焦点 |
| 90 | + |
| 91 | +###### 10、QPushButton |
| 92 | + |
| 93 | +最常用的组件之一,设置图标的方式:pushButton->setIconSize(QSize(10, 10)),继承自QAbstractButton类 |
| 94 | + |
| 95 | +###### 11、shortcut 和 QKeySequence |
| 96 | + |
| 97 | +setShortcut用于设置快捷键,而QKeySequence是Qt提供的枚举类型,用于表示某个具体按键,比如Qt::Key_A, Qt::Key_A + Qt::Key_CTRL(标识ctrl + a),当然也可以通过直接使用按键名的方式, |
| 98 | + |
| 99 | +比如button->setShortcut(QKeySequence("a")) |
| 100 | + |
| 101 | +shortcut被触发的信号时activated |
| 102 | + |
| 103 | +###### 12、setAutoRepeat |
| 104 | + |
| 105 | +设置是否允许连续点击,键盘默认是可以的,鼠标不是,需要通过setAutoRepeat来设置 |
| 106 | + |
| 107 | +###### 13、QRadioButton and QButtonGroup |
| 108 | + |
| 109 | +QRadioButton用来设置选择按钮,在提供给用户的多个选择按钮之中,用户只能选择其中一个,当然如果我们想要实现一个多个组别的radiobutton来向用户提供选择的效果,就可以使用QButtonGroup,再通过其addButton来添加radiobutton |
| 110 | + |
| 111 | +###### 14、QCheckBox |
| 112 | + |
| 113 | +复选框,可以供用户选择多个选项,和QRadioButton互相补齐。 |
| 114 | + |
| 115 | +###### 15、TextFormat 文本格式 |
| 116 | + |
| 117 | +纯文本:Qt::PlainText,纯文本,可以加入QPlainTextEdit组件来设置 |
| 118 | + |
| 119 | +富文本:Qt::RichText,内容更丰富的文本格式,比如:<b>这是一段富文本</b>——加粗加大 |
| 120 | + |
| 121 | +markdown:Qt::MarkdownText,内置了各种特殊符号来表示文本格式,比如:#这是一段markdown文本——加粗加大 |
| 122 | + |
| 123 | +autotext:Qt::AutoText,根据文档内容自动设置文本格式 |
| 124 | + |
| 125 | +###### 16、resizeEvent |
| 126 | + |
| 127 | +事件,可以通过重写父类的resizeEvent来使窗口内的部件随窗口大小的改变而改变,当然也有其他方法 |
| 128 | + |
| 129 | +###### 17、setAlignment |
| 130 | + |
| 131 | +通过setAlignment来设置label的文本样式,常用的接口有: |
| 132 | + |
| 133 | +Qt::AlignHCenter设置水平方向居中对齐;Qt::AlignVCenter设置竖直方向居中对齐 |
| 134 | + |
| 135 | +setIndent(number),设置自动缩进长度,单位是像素 |
| 136 | + |
| 137 | +setWorkWrap(true)设置自动换行,否则过长的文本会直接超过label的范围 |
| 138 | + |
| 139 | +setMargin(10)设置文本边距,四周都有 |
| 140 | + |
| 141 | +###### 18、setBuddy |
| 142 | + |
| 143 | +设置伙伴,比如button->setBuddy(button_1),通过这种方式就将button的伙伴设置为button_1(&A可以设置快捷键) |
| 144 | + |
| 145 | +###### 19、QTimer,QLCDNumber,QProgressBar |
| 146 | + |
| 147 | +QTimer是Qt中的计时器,再构建出QTimer对象之后,可以通过其中的start(number)来启动计时器,并将计时时间设置为number毫秒;当事件结束之后,会触发timeout信号,可以通过connect来使用槽函数处理信号,如果处理方式是获取QLCDNumber中的value,并通过display来设置QLCDNumber来展示新的值,实现倒计时的效果;与QProgressBar相结合,可以实现进度条的效果,也是通过槽函数处理信号 |
| 148 | + |
| 149 | +###### 20、QCalenderWidget |
| 150 | + |
| 151 | +提供给用户一个日历(精确到年月日),能够让用户选择日期,并通过selectionChanged信号来获取用户选择的日期。 |
| 152 | + |
| 153 | +###### 21、QLineEdit |
| 154 | + |
| 155 | +杭输入框,主要提供的接口 |
| 156 | + |
| 157 | +setInputMask("000-000-0000"); //比如在输入电话号码时只能通过这种格式输入 |
| 158 | + |
| 159 | +setMaxLength(length); //设置文本最大长度 |
| 160 | + |
| 161 | +setClearButtonEnabled(true); //设置按钮一键清空输入框中的所有内容 |
| 162 | + |
| 163 | +setEchoMode(true); //设置回显模式(QLineEdit::PassWord为密码式的不明文回显) |
| 164 | + |
| 165 | +setPlaceholderText("text"); //设置占位文本,开始输入时删除 |
| 166 | + |
| 167 | +###### 22、QRegularExpression and QRegularExpressionValidator |
| 168 | + |
| 169 | +通过QRegularExpression来设置正则表达式,比如""^1//d{10}$",其中^1表示正则表达式开头,$表示正则表达式结尾,//为转义转义字符,d表示整数,整个表达式的意思就是10个整数。 |
| 170 | + |
| 171 | +有了QRegularExpression就可以设置QRegularExpressionValidator,可以通过setValidator来设置检验器 |
| 172 | + |
| 173 | +###### 23、QComboBox |
| 174 | + |
| 175 | +设置下拉框,并可以通过addItem来添加选项 |
| 176 | + |
| 177 | +###### 24、QSpinBox and QDoubleSpinBox |
| 178 | + |
| 179 | +微调框,其中可以通过setValue or setRange来设置起始值和范围,前者是以整数为单位,后者是以小数为单位 |
| 180 | + |
| 181 | +###### 25、QDateTimeEdit |
| 182 | + |
| 183 | +一个输入框,可以供用户选择日期,前面的QDateTime是一个大日历 |
| 184 | + |
| 185 | +###### 26、QSlider |
| 186 | + |
| 187 | +设置滑动条,具体又有两种:QVerticalSlider,QHorizontalSlider |
| 188 | + |
| 189 | +该组件的接口有: |
| 190 | + |
| 191 | +setMinimum设置最小值 |
| 192 | + |
| 193 | +setMaximum设置最大值 |
| 194 | + |
| 195 | +setValue设置初始值 |
| 196 | + |
| 197 | +setSingleStep设置每一步的变化单位 |
| 198 | + |
| 199 | +###### 27、QListWidget and QTableWidget 多组件部件 |
| 200 | + |
| 201 | +QListWidget可以通过addItem来添加新的组件 |
| 202 | + |
| 203 | +QTableWidget对于行和列的操作是insertRow and insertColumn,以及设置第一行表头:setHorizontalHeaderItem,设置setVerticalHeaderItem;对于添加单个组件有setItem |
| 204 | + |
| 205 | +###### 28、QTreeWidget |
| 206 | + |
| 207 | +通过addTopLevelItem来添加最顶层控件,每个控件都可以通过addChild来添加其子部件 |
| 208 | + |
| 209 | +###### 29、QTabWidget |
| 210 | + |
| 211 | +要设置在新的QWidget中,添加标签页,通过count来获取已有标签页的个数,addTab来添加新的标签页,通过setCurrentIndex来设置当前选中的标签页,通过removeIndex(number)来删除标签页 |
| 212 | + |
| 213 | +###### 30、QVBoxLayout(竖直) and QHBoxLayout(水平) and QGridLayout(网格) and QFormLayout(V and H的plus,可以将两个组件设置在一个格式里) |
| 214 | + |
| 215 | +一个页面只能加上一个layout,通过qtdesigner可以添加多个,但是这些layout失去了随着窗口大小改变自身大小的能力。在每一次addWidget时可以制定比例。 |
| 216 | + |
| 217 | +对于设置进layout的一个组件,可以设置他的QSizePolicy,比如Expanding |
| 218 | + |
| 219 | +###### 31、QSpacerItem |
| 220 | + |
| 221 | +设置空组件,设置进layout中(通过addSpacerItem) |
| 222 | + |
| 223 | + |
| 224 | + |
0 commit comments