亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊(cè) 查看新帖 |

Chinaunix

  平臺(tái) 論壇 博客 文庫(kù)
最近訪問(wèn)板塊 發(fā)新帖
查看: 1672 | 回復(fù): 0
打印 上一主題 下一主題

QT界面(控件)相關(guān)設(shè)計(jì)的一些技巧總結(jié) [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2011-12-21 08:42 |只看該作者 |倒序?yàn)g覽
   引言  最近在做數(shù)據(jù)庫(kù)相關(guān)課程設(shè)計(jì),所以就借此機(jī)會(huì),先熟悉一下Qt的一些編程,同時(shí)了解一下C++的一些特性。其實(shí)更重要的是如何組織好相關(guān)模塊的連接,如何規(guī)劃項(xiàng)目,等等。所以就順道把過(guò)程中遇到的問(wèn)題和重要的一些控件的槽和信號(hào)介紹一下,以后忘了可以回來(lái)看。呵呵。
   以下是我用到的一些重要的函數(shù)和代碼:
一、數(shù)據(jù)庫(kù)的連接
  1. QSqlDatabase TB = QSqlDatabase::addDatabase("QMYSQL");// becomes the new default connect
//TB.setConnectOptions("CLIENT_SSL=1;CLIENT_IGNORE_SPACE=1");//使用SSL安全連接
TB.setHostName("127.0.0.1");//主機(jī)名
TB.setDatabaseName("chat");//數(shù)據(jù)庫(kù)名
//TB.setPort(3306);//端口號(hào)
TB.setUserName("root");//用戶名
TB.setPassword("123");//密碼
  2.數(shù)據(jù)的避免無(wú)法處理和插入漢字問(wèn)題
create database chat character set GBK;//這樣建立數(shù)據(jù)庫(kù)就可以插入中文或者其它辦法 use chat; --查看數(shù)據(jù)庫(kù)的字符集 show variables like 'character\_set\_%'; show variables like 'collation_%'; --設(shè)置數(shù)據(jù)庫(kù)字符編碼 set names 'GBK' --這樣的話在consle端口查看不會(huì)是亂碼 --drop table xxxx; --修改系列 --增加Head屬性 alter table tb_user add Head varchar(20); --刪除數(shù)據(jù) delete from tb_userRS where friendID = "107865437"; --更新屬性 update tb_user set username="淼的世界" where id="642419907";

二、應(yīng)用程序漢字處理(黑代碼)
QTextCodec::setCodecForTr(QTextCodec::codecForName("GB18030"));//字體處理
三、設(shè)定整個(gè)對(duì)話框的背景顏色(黑代碼)
this->setAutoFillBackground(true);//1s step
QPalette palette;//2s step
palette.setBrush(QPalette::Background, QBrush(QPixmap("image/login.JPG")));
this->setPalette(palette);//3s step
四、應(yīng)用程序圖標(biāo)設(shè)計(jì)
圖標(biāo)設(shè)計(jì)的時(shí)候,我們要把.ico文件放在工程的ico目錄下,或者其它目錄也行。然后在該圖標(biāo)目錄下建立一個(gè)后綴為.rc的文件,內(nèi)容如下,IDI_ICON1 ICON DISCARDABLE "cool.ico" ,就樣在程序中如此調(diào)用:this->setWindowIcon(QIcon("ico/cool.ico"));//設(shè)置程序ico圖標(biāo),注意要在.pro做設(shè)置,OK。
五、應(yīng)用程序enter快捷鍵事件的實(shí)現(xiàn)
  1.在頭文件中定義一個(gè)快捷鍵 QShortcut *key_enter_login;//快捷鍵登錄
2.定義相應(yīng)的槽 private slots:
void enter_longin();
3.構(gòu)造函數(shù)中
key_enter_login = new QShortcut(QKeySequence(tr("Return")), this);//設(shè)置Enter快捷鍵,但是Enter不行,用Return就行。
connect(key_enter_login, SIGNAL(activated()), this, SLOT(enter_longin()));
六、文字鏈接到網(wǎng)頁(yè)
構(gòu)造函數(shù)中
QLabel *m_r_acount = new QLabel(this); m_r_acount->setText(tr("<a href=\"http://www.yafeilinux.com\">注冊(cè)帳號(hào) "));
connect(m_r_acount, SIGNAL(linkActivated(QString)), this, SLOT(openUrl(const QString)));
槽中不要忘了頭文件申明槽)
void MyFirstQQ::openUrl(const QString &register_url)
{ QDesktopServices::openUrl(QUrl("http://localhost:8080/chat/register.jsp"));
}
六、QComboBox的設(shè)置
QComboBox *m_a_choice = new QComboBox(this);
QStringList C_strings;
C_strings <<"666666"<< "642419907" << "767938089" << "107865437" << "110120119" ;
completer = new QCompleter(C_strings, this);//可以進(jìn)行匹配的哦
m_a_choice->clear();
m_a_choice->addItems(C_strings);
m_a_choice->setMaxVisibleItems(7);//設(shè)置最大顯示下列項(xiàng) 超過(guò)要使用滾動(dòng)條拖拉
m_a_choice->setEditable(true);
m_a_choice->setCompleter(completer);
六、鼠標(biāo)滑過(guò)事件
頭文件中:
protected:
     void mouseMoveEvent(QMouseEvent *event);//鼠標(biāo)滑動(dòng)
構(gòu)造函數(shù)中:
//設(shè)定鼠標(biāo)跟蹤事件 this->setMouseTracking(true); //標(biāo)簽跟蹤 qlabel->setMouseTracking(true);//還可以設(shè)置其它控件
實(shí)現(xiàn)函數(shù)中:(舉個(gè)小例子)
int x = event->x(); int y = event->y(); if(x > u_b_x && x < u_b_x+u_b_width && y > u_b_y && y < u_b_y+u_b_height) { u_background->setPixmap(QPixmap("image/skin3.JPG")); } else if(x > u_button_x && x < u_button_x+u_button_width && y > u_button_y && y < u_button_y+u_button_height) { textbox.show(); } else{ u_background->setPixmap(QPixmap("image/skin.JPG")); textbox.close(); }
六、重寫標(biāo)簽鼠標(biāo)點(diǎn)擊事件的實(shí)現(xiàn)(需要重寫QLabel,構(gòu)造自己的QLabel->MyLabel)
#ifndef CLICKEDLABEL_H_ #define CLICKEDLABEL_H_ #include <QtGui> class ClickedLabel : public QLabel //繼承QLabel,重寫事件,實(shí)現(xiàn)點(diǎn)擊標(biāo)簽退出 { Q_OBJECT public: ClickedLabel(QWidget *parent = 0); int MyLabelPressed; void mousePressEvent(QMouseEvent *e);//添加鼠標(biāo)響應(yīng)事件 void mouseReleaseEvent(QMouseEvent *e); signals: void clicked();//點(diǎn)擊信號(hào) }; #endif /* CLICKEDLABEL_H_ */

#include "ClickedLabel.h" ClickedLabel::ClickedLabel(QWidget *parent) :QLabel(parent) { MyLabelPressed = 0; } void ClickedLabel::mousePressEvent ( QMouseEvent * e ) { MyLabelPressed = 1; } void ClickedLabel::mouseReleaseEvent ( QMouseEvent * e ) { if (MyLabelPressed) { emit clicked(); MyLabelPressed = 0; } }
實(shí)使用的時(shí)候,只要包括該頭文件,然后用ClickedLabel定義一個(gè)這樣的標(biāo)簽,那么在如下使用信號(hào)和槽:
ClickedLabel *s_exit;//退出標(biāo)簽,這樣就可以使用clicked()信號(hào)了
connect(s_exit, SIGNAL(clicked()), this, SLOT(closed()));

七、重寫QListWidget鼠標(biāo)右擊彈出菜單事件。(該實(shí)現(xiàn)需要重寫QListWidget)
#ifndef LISTWIDGET_H_ #define LISTWIDGET_H_ #include<QApplication> #include<QWidget> #include<QListWidget> #include<QMenu> #include<QAction> #include "scaninfo.h" #include "addfriend.h" class ListWidget : public QListWidget { Q_OBJECT public: explicit ListWidget(QWidget *parent = 0);//explicit構(gòu)造函數(shù)只能被顯示調(diào)用 void contextMenuEvent ( QContextMenuEvent * event ); private: QAction *action;//刪除選項(xiàng) QAction *scan_action;//查看資料 QAction *add_friend;//添加好友 QMenu *popMenu; }; #endif /* LISTWIDGET_H_ */

#include "ListWidget.h"
#include<QMessageBox>

ListWidget::ListWidget(QWidget *parent):
QListWidget(parent)
{
action = new QAction(QIcon("image/delete.jpg"),tr("刪除好友"),this); //刪除事件
scan_action = new QAction(QIcon("image/scan.jpg"),tr("查看資料"),this);
add_friend = new QAction(QIcon("image/addFriend.jpg"),tr("添加好友"),this);
popMenu = new QMenu(this);
}

void ListWidget::contextMenuEvent ( QContextMenuEvent * event )
{
if(this->itemAt(mapFromGlobal(QCursor::pos())) != NULL) //如果有item則選中
{
itemAt(mapFromGlobal(QCursor::pos()))->setSelected(true);
}
else
{
popMenu->addAction(add_friend);
popMenu->removeAction(action);
popMenu->removeAction(scan_action);
popMenu->exec(QCursor::pos());
}
if(this->itemAt(mapFromGlobal(QCursor::pos())) != NULL) //如果有item則添加"刪除"菜單
{
popMenu->addAction(action);
popMenu->addAction(scan_action);
popMenu->removeAction(add_friend);
popMenu->exec(QCursor::pos()); // 菜單出現(xiàn)的位置為當(dāng)前鼠標(biāo)的位置
}
}
使用的時(shí)候在你需要的類中(頭文件或者構(gòu)造函數(shù)):ListWidget u_good_Widget = new ListWidget(this);就行

七、類似于QQ那種伸縮列表的小效果,自己可以參考
  1.申明該QListWidget的相關(guān)槽
connect(u_good_Widget, SIGNAL(clicked(QModelIndex)), this, SLOT(good_Stretch(QModelIndex)));
2.槽實(shí)現(xiàn)
void UserQQ::good_Stretch(QModelIndex index) { if(u_flag){ u_item->setIcon(QIcon(QPixmap("image/QListWidgetItemUp.png"))); } else
{ u_item->setIcon((QPixmap("image/QListWidgetItemDown.png"))); } if(index.row()==0){ for(int j = 1; j < u_hide_count+1; j++) { u_good_Widget->setRowHidden(j, u_flag); } u_flag = !u_flag; //這里不要這樣做u_flag = false;結(jié)果也出乎意料 } }
七、QMenu中QAction的事件定義
QMenu *cmenu = NULL;//定義并初始化右鍵 cmenu = new QMenu(this);//初始化右鍵在何處顯示 QAction *EnterGroupTalk = cmenu->addAction(QIcon("image/grouptalk.jpg"),tr("進(jìn)入群聊"));//添加右鍵菜單顯示項(xiàng) connect(EnterGroupTalk,SIGNAL(triggered()),this,SLOT(on_actionEnter_GroupTalk_triggered()));//使AddRecode與其他函數(shù)關(guān)聯(lián)
八、主窗體,標(biāo)簽之類的一些外觀設(shè)計(jì)
this->setFixedSize(this->width(), this->height());//固定大小 this->setWindowFlags(Qt::FramelessWindowHint);//去掉標(biāo)題欄語(yǔ)句 QFont font("ZYSong18030", 12);//設(shè)置字體 this->setFont(font); //透明度 this->setWindowOpacity(0.8);
//標(biāo)簽
QLabel s_acount_label = new QLabel(this);
s_acount_label->setFont(QFont("ZYSong18030", 8));//字體小點(diǎn)
s_acount_label->setGeometry(155, 10, 60, 20);
九、以下是微小的展示效果,當(dāng)然很多功能沒(méi)有實(shí)現(xiàn),慢慢完善吧,主要是想總結(jié)一下,不管好不好
十、(以上都不是什么很厲害的,其實(shí)網(wǎng)絡(luò)編程應(yīng)該很重要。我參考資料實(shí)現(xiàn)了群聊,但是對(duì)于tcp還不是很熟悉,所以以后慢慢再學(xué)習(xí)了,自己還是不行,所以就不貼了,覺(jué)得自己行的時(shí)候再說(shuō))
您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號(hào)-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號(hào):11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專區(qū)
中國(guó)互聯(lián)網(wǎng)協(xié)會(huì)會(huì)員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過(guò)ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請(qǐng)注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP