|
TQ-lkp 发表于 2012-12-27 14:46
当然是可以的,提问要讲方法,你不贴代码谁知道哪里不对
帮忙看下。
layout1.h //--------------------
#ifndef LAYOUT1_H
#define LAYOUT1_H
#include <iostream>//
#include <QDialog>
#include <QtGui/QDialog>
#include <QWidget>
#include <QListWidget>
#include <QStackedWidget>
#include <QHBoxLayout>
#include <QtGui/QApplication>
#include <QPushButton>
#include <QTextCodec>
#include <QLabel>
#include <QComboBox>
#include <QLCDNumber>
#include "widget1.h"
#include "widget2.h"
#include "widget3.h"
#include "widget4.h"
#include "widget5.h"
#include "widget6.h"
#include "widget7.h"
#include "widget8.h"
class layout1 :public QWidget
{
Q_OBJECT
public:
layout1(QWidget *parent = 0);
void selectMenu(int menuNum);
signals:
void sendValue(int menuKey);
private:
int menuKey;
QListWidget *listWidget;
QStackedWidget *stackedWidget;
QSplitter *splitter;
QLabel *label1;
QLabel *label2;
QLCDNumber lcdNumber1;
QLCDNumber lcdNumber2;
QLCDNumber lcdNumber3;
QHBoxLayout hLayout;
QHBoxLayout buttonLayout;
QVBoxLayout rightLayout;
QVBoxLayout leftLayout;
QLabel *labelIcon;
Widget1 widget1;
Widget2 widget2;
Widget3 widget3;
Widget4 widget4;
Widget5 widget5;
Widget6 widget6;
Widget7 widget7;
Widget8 widget8;
};
#endif // LAYOUT1_H
---------------------
layout1.cpp-----
#include <QtGui>
#include "layout1.h"
layout1 ::layout1(QWidget *parent): QWidget(parent)
{
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("utf8"));
setStyleSheet(QString::fromUtf8("layout1{background-color: rgb(51, 204, 224);}"));
setWindowTitle(tr("Stacked Windgets"));
listWidget = new QListWidget();
splitter = new QSplitter(Qt::Horizontal);
splitter->setOpaqueResize(true);
listWidget->setIconSize(QSize(20, 20));
listWidget->setFont(QFont("wqy-zenhei", 18, QFont::Black));
listWidget->addItem(" A");
listWidget->addItem(" B");
listWidget->addItem(new QListWidgetItem( QIcon(tr("1/icon.png")),tr("选择1")));
listWidget->addItem( new QListWidgetItem(QIcon(tr("1/icon.png")),tr("选择2") ));
listWidget->addItem( new QListWidgetItem(QIcon(tr("1/icon.png")),tr("选择3") ));
listWidget->addItem( new QListWidgetItem(QIcon(tr("1/icon.png")), tr("选择4")));
listWidget->addItem( new QListWidgetItem(QIcon(tr("1/icon.png")), tr(" 选择5")));
listWidget->addItem( new QListWidgetItem(QIcon(tr("1/icon.png")), tr("选择6")));
listWidget->addItem( new QListWidgetItem(QIcon(tr("1/icon.png")), tr("选择7")));
listWidget->addItem( new QListWidgetItem(QIcon(tr("1/icon.png")), tr("选择8")));
stackedWidget = new QStackedWidget;
stackedWidget->addWidget(&widget1);
stackedWidget->addWidget(&widget2);
stackedWidget->addWidget(&widget3);
stackedWidget->addWidget(&widget4);
stackedWidget->addWidget(&widget5);
stackedWidget->addWidget(&widget6);
stackedWidget->addWidget(&widget7);
stackedWidget->addWidget(&widget8);
stackedWidget->setCurrentIndex(1);
connect(listWidget, SIGNAL(currentRowChanged(int)), stackedWidget, SLOT(setCurrentIndex(int)));
connect(this,SIGNAL(sendValue(int)),stackedWidget,SLOT(setCurrentIndex(int)));
label1 = new QLabel(tr(" 下"));
label2 = new QLabel(tr(" 上"));
label2->setFont(QFont("wqy-zenhei", 14, QFont::Black));
label1->setFont(QFont("wqy-zenhei", 14, QFont::Black));
QGridLayout*Layout = new QGridLayout();
Layout->addWidget(label1, 2, 0);
Layout->addWidget(label2, 0, 0);
QWidget *edit = new QWidget();
edit->setLayout(Layout);
splitter->addWidget(listWidget);
splitter->addWidget(stackedWidget);
splitter->addWidget(edit);
splitter->setStretchFactor(6,1);
QHBoxLayout *mainLayout = new QHBoxLayout(this);
mainLayout->addWidget(listWidget);
mainLayout->addWidget(stackedWidget);
mainLayout->addWidget(edit);
mainLayout->setStretchFactor(listWidget, 2);
mainLayout->setStretchFactor(stackedWidget, 3);
mainLayout->setStretchFactor(edit, 1);
}
void layout1::selectMenu(int menuNum)
{
static int oldNumber=0;
if(oldNumber!=menuNum){
emit this->sendValue(menuNum); //不知信号是否发送?
std::cout<<"selcet the menu "<<std::dec<<menuNum<<"!"<<std::endl; //按键时此处信息可正常打印,且menuNum值正确
}
oldNumber = menuNum;
}
//end of layout1.cpp
此程序本意是在屏幕左侧显示菜单列表,右侧显示对应菜单内容。程序在pc下用鼠标可正常操作,程序下到板子上以后,我想用板子上的按键操作。我做了这样的处理,在检测到按键后调用类layout1的成员函数selectMenu()(传递过来的是要选择的菜单项值),在此函数里发送自定义的一个信号。这个信号已经和Qt的槽函数setCurrentIndex(int)连接。但实际上按键后selectMenu()里打印的信息可通过终端看到,应该emit this->sendValue(menuNum) 也执行了,就是板子上界面没任何变化。
|
|