内容:
完成“添加”UI界面设计
主要知识点
UI界面设计
任务
1.在UI设计师界面完成UI界面设计。
2.完成“添加线路”功能。
3.完成“添加站点”功能。
4.完成“添加连线”功能。
一、创建UI界面
1.1创建文件、标签页
在工程中添加新的UI界面managelines.ui,双击打开UI界面设计大师,在UI界面中添加Tab Widget控件,在Tab Widget控件中创建三个tab页,分别用于显示“线路”、“站点”、“连接”。
1.1.1 线路
1.1.2 站点
1.1.3 连接
1.2 构造函数初始化
ManageLines::ManageLines(QWidget *parent) :
QDialog(parent),
ui(new Ui::ManageLines)
{
ui->setupUi(this);
tabWigetsVector.push_back(ui->tabAddLine);
tabWigetsVector.push_back(ui->tabAddStation);
tabWigetsVector.push_back(ui->tabAddConnection);
tabIconVector.push_back(QIcon(QPixmap(":/icon/icon/subway.png")));
tabIconVector.push_back(QIcon(QPixmap(":/icon/icon/station.png")));
tabIconVector.push_back(QIcon(QPixmap(":/icon/icon/connect.png")));
tabTextVector.push_back("线路(&L)");
tabTextVector.push_back("站点(&S)");
tabTextVector.push_back("连接(&C)");
}
1.3 添加指针代码
manageLines=new ManageLines(this);
1.4 关联信号和槽函数
connect(manageLines->ui->tabWidget, SIGNAL(currentChanged(int)), this, SLOT(tabWidgetCurrentChanged(int)));
connect(manageLines->ui->pushButtonAddLine, SIGNAL(clicked()), this, SLOT(addLine()));
connect(manageLines->ui->pushButtonAddStation, SIGNAL(clicked()), this, SLOT(addStation()));
connect(manageLines->ui->pushButtonConnect, SIGNAL(clicked()), this, SLOT(addConnection()));
二、槽函数
2.1 tabWidgetCurrentChanged
//添加列表视图部件变化槽函数
void MainWindow::tabWidgetCurrentChanged(int index)
{
QWidget* widget=manageLines->ui->tabWidget->currentWidget();
if(widget==manageLines->tabWigetsVector[1])
{
manageLines->linesNameList=subwayGraph->getLinesNameList();
manageLines->updateLinesListWidget();
}
else if(widget==manageLines->tabWigetsVector[2])
{
manageLines->linesNameList=subwayGraph->getLinesNameList();
manageLines->stationsNameList=subwayGraph->getStationsNameList();
manageLines->ui->comboBoxConnectStation1->setMaxCount(manageLines->stationsNameList.size());
manageLines->ui->comboBoxConnectStation2->setMaxCount(manageLines->stationsNameList.size());
manageLines->ui->comboBoxConnectLine->setMaxCount(manageLines->linesNameList.size());
manageLines->updateComboBox();
}
Q_UNUSED(index);
}
2.2 addLine
void MainWindow::addLine()
{
QMessageBox box;
box.setWindowTitle(tr("添加线路"));
box.setWindowIcon(QIcon(":/icon/icon/subway.png"));
if(manageLines->lineName.isEmpty())
{
box.setIcon(QMessageBox::Warning);
box.setText(tr("请输入线路名称!"));
}
else if(subwayGraph->getLineHash(manageLines->lineName)==-1)
{
box.setIcon(QMessageBox::Information);
box.setText(tr("线路:")+manageLines->lineName+tr(" 添加成功!"));
subwayGraph->addLine(manageLines->lineName, manageLines->lineColor);
updateTranserQueryInfo();
}
else
{
box.setIcon(QMessageBox::Critical);
box.setText(tr("添加失败!\n错误原因:线路名已存在!"));
}
box.addButton(tr("确定"),QMessageBox::AcceptRole);
if(box.exec()==QMessageBox::Accepted)
{
box.close();
}
updateTranserQueryInfo();
}
2.2.1 warning
2.2.2 “添加成功”
2.2.3“添加失败”
2.3 addStation
//添加站点功能函数
void MainWindow::addStation()
{
QMessageBox box;
box.setWindowTitle(tr("添加站点"));
box.setWindowIcon(QIcon(":/icon/icon/station.png"));
if(manageLines->stationName.isEmpty())
{
box.setIcon(QMessageBox::Warning);
box.setText(tr("请输入站点名称!"));
}
else if(manageLines->linesSelected.isEmpty())
{
box.setIcon(QMessageBox::Warning);
box.setText(tr("请选择站点所属线路!"));
}
else
{
if(subwayGraph->getStationHash(manageLines->stationName)!=-1)
{
box.setIcon(QMessageBox::Critical);
box.setText(tr("添加失败!\n错误原因:站点已存在!"));
}
else
{
Station s(manageLines->stationName, manageLines->longitude, manageLines->latitude,
subwayGraph->getLinesHash(manageLines->linesSelected));
subwayGraph->addStation(s);
box.setText(tr("站点:")+manageLines->stationName+tr(" 添加成功!"));
updateTranserQueryInfo();
}
}
box.addButton(tr("确定"),QMessageBox::AcceptRole);
if(box.exec()==QMessageBox::Accepted)
{
box.close();
}
updateTranserQueryInfo();
on_actionLineMap_triggered();
}
2.4 addConnection
//添加连接功能函数
void MainWindow::addConnection()
{
QString station1=manageLines->ui->comboBoxConnectStation1->currentText();
QString station2=manageLines->ui->comboBoxConnectStation2->currentText();
int s1=subwayGraph->getStationHash(station1);
int s2=subwayGraph->getStationHash(station2);
int l=subwayGraph->getLineHash(manageLines->ui->comboBoxConnectLine->currentText());
QMessageBox box;
box.setWindowTitle(tr("添加连接"));
box.setWindowIcon(QIcon(":/icon/icon/connect.png"));
if(s1==-1||s2==-1||l==-1)
{
box.setIcon(QMessageBox::Warning);
box.setText(tr("请选择已有的站点和线路!"));
}
else if(s1==s2)
{
box.setIcon(QMessageBox::Warning);
box.setText(tr("同一站点不需要连接!"));
}
else if(!subwayGraph->getStationLinesInfo(s1).contains(l))
{
box.setIcon(QMessageBox::Critical);
box.setText(tr("连接失败!\n错误原因:所属线路不包含站点1"));
}
else if(!subwayGraph->getStationLinesInfo(s2).contains(l))
{
box.setIcon(QMessageBox::Critical);
box.setText(tr("连接失败!\n错误原因:所属线路不包含站点2"));
}
else
{
box.setIcon(QMessageBox::Information);
box.setText(tr("添加连接成功!"));
subwayGraph->addConnection(s1,s2,l);
}
if(box.exec()==QMessageBox::Accepted)
{
box.close();
}
updateTranserQueryInfo();
on_actionLineMap_triggered();
}