16,173
社区成员
发帖
与我相关
我的任务
分享
#ifndef GOODASSISTANT_H
#define GOODASSISTANT_H
#include<QWidget>
#include<QLineEdit>
#include<QToolButton>
#include<QPoint>
class GoodAssistant : public QWidget
{
Q_OBJECT
public:
GoodAssistant(QWidget *parent = 0);
~GoodAssistant();
protected:
void mousePressEvent(QMouseEvent *event);
void mouseMoveEvent(QMouseEvent *event);
private:
QLineEdit *search_le;
QToolButton *search_tbtn;
QToolButton *add_tbtn;
QPoint drag_position;
QPoint mouse_position;
private slots:
};
#endif // GOODASSISTANT_H
#include "goodassistant.h"
#include<QPixmap>
#include<QHBoxLayout>
#include<QGridLayout>
#include<QSplitter>
#include<QMouseEvent>
GoodAssistant::GoodAssistant(QWidget *parent)
: QWidget(parent)
{
search_le = new QLineEdit;
search_le->setFixedSize(640, 35); //设置搜索输入框大小
search_le->setPlaceholderText(tr("谁是世界上最帅的人?")); //默认显示字
search_le->setFocus(); //自动聚焦在输入框上
add_tbtn = new QToolButton;
add_tbtn->setFixedSize(35, 35); //设置添加按钮大小
add_tbtn->setToolTip(tr("添加问题和解决方案")); //按钮提示
add_tbtn->setIcon(QPixmap(":/images/add.png")); //使用Qt的资源机制法添加图片
add_tbtn->setIconSize(QSize(35, 35)); //设置图片在按钮上的大小
add_tbtn->setCursor(Qt::PointingHandCursor); //设置鼠标指针形态
add_tbtn->setStyleSheet("border:0;"); //把按钮边框设为0
//信号与槽
QHBoxLayout *searchle_and_addtbtn = new QHBoxLayout;
searchle_and_addtbtn->addStretch(); //添加占位符,好让add按钮位于输入框最右
searchle_and_addtbtn->addWidget(add_tbtn); //加入添加按钮
searchle_and_addtbtn->setContentsMargins(0, 1, 0, 0); //设置边距
search_le->setLayout(searchle_and_addtbtn); //设置输入框布局
search_le->setTextMargins(0, 0, add_tbtn->width(), 0); //设置文字输入尾端限制
search_tbtn = new QToolButton;
search_tbtn->setFixedSize(100, 35); //设置搜索按钮大小
search_tbtn->setToolTip(tr("点击搜索")); //按钮提示
search_tbtn->setIcon(QPixmap(":images/search.png")); //使用Qt的资源机制法添加图片
search_tbtn->setIconSize(QSize(100, 35)); //设置图片在按钮上的大小
search_tbtn->setCursor(Qt::PointingHandCursor); //设置鼠标指针形态
search_tbtn->setStyleSheet("border:0;"); //把按钮边框设为0
QSplitter *search_splitter = new QSplitter(Qt::Horizontal, this); //创建横向切分窗口
search_splitter->setHandleWidth(0); //设置切分条宽度
search_splitter->setFrameShape(QFrame::Panel);
search_splitter->addWidget(search_le);
search_splitter->addWidget(search_tbtn);
//search_splitter->setStretchFactor(0, 0); 不需要,因为上面已经用了setFixedSize()
//search_splitter->setStretchFactor(1, 0); setChildrenCollapsible()也不需要
QGridLayout *main_layout = new QGridLayout; //在父窗体中布局并显示
main_layout->addWidget(search_splitter);
setLayout(main_layout);
}
GoodAssistant::~GoodAssistant()
{
}
void GoodAssistant::mousePressEvent(QMouseEvent *event)
{
if(event->button() == Qt::LeftButton)
{
drag_position = event->globalPos() - geometry().topLeft();
mouse_position = event->pos();
event->accept();
}
if(event->button() == Qt::RightButton)
close();
}
void GoodAssistant::mouseMoveEvent(QMouseEvent *event)
{
if(event->buttons() & Qt::LeftButton)
{
move(pos() - drag_position + event->pos() - mouse_position);
event->accept();
}
}
#include "goodassistant.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
GoodAssistant w;
//w.setWindowOpacity(1); //窗口透明度,0为透明,1为不透明
w.setWindowFlags(Qt::FramelessWindowHint); //取消边框
w.setAttribute(Qt::WA_TranslucentBackground); //窗口背景透明
w.show();
return a.exec();
}