Posts Tagged ‘QT’

关于QT中域名解析IP的方法(阻塞式)

星期四, 五月 2nd, 2013 27 views

最近在用QT制作一套网络安全工作,正巧需要实现域名解析出IP的一个功能,用winsock也可以实现,需要用到gethostbyname(url)方法,调用后返回的是一个HOSTENT结构体。但相对在QT中来处理这个结构体,各种位操作及字符指针的移动比较麻烦,同时也考虑到将来工具的跨平台性,趁早拜托对winsock的依赖为好,因此,还是用QT中实现域名解析的QHostInfo类来实现这项功能。

相对于winsock中的几十行代码,在QT中仅仅需要两行即可实现:

1
2
QHostInfo info=QHostInfo::fromName("www.beitown.com");
qDebug()<<info.addresses().first().toString()<<endl;

注意如果提示 QHostInfo : No such File or directory (找不到QHostInfo文件)请在.pro 文件添加 QT += network 即可.

本例为QHostInfo解析域名方法的其中之一,即可阻塞式方法。另外一种是使用信号与槽机制的非阻塞方法,实现原理类似,后续用到时另外开篇。

本篇到此,谢谢关注。

BeiTown
2013.05.02

QT 多线程(UI线程)间的signal/slot(信号与槽)通信

星期三, 五月 1st, 2013 179 views

写这篇的时候感觉有点像写之前Android主线程与子线程间的通信消息队列,其实需要这么做的原因基本相同,即QT在主线程(UI线程)中某些阻塞行为会造成UI的更新的阻塞,举例来说,在UI线程中创建一个while循环,并在这个while循环中对UI进行更新,运行结果是UI完全无响应,因为UI线程一直卡在while中无法跳出来去完成更新,虽然它不断的得到了更新UI的通知。

因此在本篇中我们将通过多线程的方式来解决此类问题。

QT中已经替我们实现了一个线程类QThread,我们只需要继承它就好。使用时只需->start()即可。

1
2
3
4
5
6
7
8
9
10
class MyThread : public QThread
{
Q_OBJECT
public:
    MyThread();
signals://定义一个信号
    void sendString(QString);
protected:
    void run();
};

上面的代码简单实现了一个线程类的头文件,这里注意一下定义的signals(信号)。
信号与槽是QT特有的一个通信机制,简单阐述一下其运用在线程间的工作流程。
(更多…)

QT paintEvent重绘事件及窗体圆角代码

星期日, 一月 27th, 2013 66 views

利用重回paintEvent重绘事件来进行窗体重绘,本例中使用一个圆角代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
void MainWindow::paintEvent(QPaintEvent *){

    QBitmap objBitmap(size());
    //QPainter用于在位图上绘画
    QPainter painter(&objBitmap);
    //填充位图矩形框(用白色填充)
    painter.fillRect(rect(),Qt::white);
    painter.setBrush(QColor(0,0,0));
    //在位图上画圆角矩形(用黑色填充)
    painter.drawRoundedRect(this->rect(),10,10);
    //使用setmask遮罩
    setMask(objBitmap);

}

在mainwindow.cpp中直接添加 MainWindow::paintEvent 方法,主窗体运行时会自动调用该处的重绘代码。
本段代码使用了遮罩原理进行圆角绘制。举一反三后,其原理可以用到更多的地方。
最后效果如下:

注意,当使用了遮罩后,程序自带的标题框会消失,或者说是被覆盖了。
本文到此,感谢关注。

BeiTown
2013.01.27

QT外部调用qss样式表方法

星期日, 一月 27th, 2013 76 views

以利用qss样式在主窗口添加背景图片为例:

①新建qss文件
建立文本文件,内容先空着一会添加。更改文件后缀名为qss。本例中qss为style.qss

②创建qrc资源文件
右键点项目 “Add New(添加新文件)”->”QT Resource file(QT资源文件)” 生成一个qrc文件。本例中qrc为src.qrc

③将qss文件添加进qrc中
(更多…)

QT调用多个UI窗口的方法及error LNK2019修复

星期六, 一月 26th, 2013 785 views

首先是创建一个QT项目,选择QT Gui应用。然后一直下一步。

创建完成后项目结构如下

这个时候点运行,出现一个空的mainwindow界面,这里就不截图了。
(更多…)